package com.mexcad.reports;

import java.awt.Color;
import java.io.IOException;
import java.sql.Connection;
import java.sql.Timestamp;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;

import org.hibernate.Session;

import com.lowagie.text.Chunk;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Element;
import com.lowagie.text.Font;
import com.lowagie.text.FontFactory;
import com.lowagie.text.PageSize;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.PdfWriter;
import com.mexcad.db.connectors.CreditoConnector;
import com.mexcad.db.connectors.ReportConnectors;
import com.mexcad.db.dto.CargoPago;
import com.mexcad.db.dto.CatPeriodoSolicitado;
import com.mexcad.db.dto.Credito;
import com.mexcad.db.utils.HibernateUtil;
import com.mexcad.reports.utils.DataType;
import com.mexcad.reports.utils.DocumentsAdds;
import com.mexcad.reports.utils.PDFDocumentException;
import com.mexcad.reports.utils.PDFTable;
import com.mexcad.utils.Constantes;
import com.mexcad.utils.Formatter;



public class DesglosePagosAnticipados   extends HttpServlet {
	private static final long serialVersionUID = 1L;
	private PdfWriter writer; 
	private String titulo="Detalle de pagos anticipados";

	protected void doPost(HttpServletRequest req, HttpServletResponse res)
			throws ServletException, IOException {
	
		Integer mexcad= req.getParameter("mexcad")!=null?new Integer(req.getParameter("mexcad")):new Integer(0);
		Integer uno=req.getParameter("gerente")!=null?new Integer(req.getParameter("gerente")):new Integer(0);
		Integer dos=req.getParameter("acreedor")!=null?new Integer(req.getParameter("acreedor")):new Integer(0);
		

		
		try {
			Document doc =  new Document(PageSize._11X17.rotate(), 25, 25, 25, 50);
			writer=   PdfWriter.getInstance(doc, res.getOutputStream());
			writer.setViewerPreferences(PdfWriter.PageModeUseThumbs);
			writer.setLinearPageMode();
			writer.setPageEvent( new DocumentsAdds.MyPageEvents());
			
			DocumentsAdds.addMetaData(doc, "Documento Test");
			doc.open();
			
			String fechaIni= req.getParameter("fecha_ini");
			String fechaFin= req.getParameter("fecha_fin");
			PDFTable pdfTable=null;
			
			if(fechaIni != null && fechaFin!= null){

				
				DocumentsAdds.addSimpleHeader(doc, titulo, fechaIni, fechaFin);
				
				List<Object []> lista;
				lista =  ReportConnectors.getAllPagosPagosAnticipados(fechaIni,fechaFin);
			
				String []header =new String[]{"Crédito","Nombre", "Prestamo","Pago periódico", "Total",
										      "Fecha Ini","Fecha Fin","Fecha Reg","Monto pago", "Abono", 
										      "Capital", "Interés", "Impuesto", "Comisión"};
				float []tamCols =new float[]{1.0f, 2.5f, 1.0f, 1.0f, 1.0f, 
											 1.0f, 1.0f, 1.0f, 1.0f, 1.0f,
											 1.0f, 1.0f, 1.0f, 1.0f};
				
				List<DataType []> listadoDatos = new ArrayList<DataType []>();

		
						for(Iterator<Object[]> it = lista.iterator();it.hasNext();){
							Object[] obj = it.next();
			
							DataType []datos = new DataType[header.length];
							
			
							
							 datos[0]= new DataType(); //idCredito
							 datos[0].setAlignMode(Element.ALIGN_CENTER);
							 datos[0].setData((Integer)obj[0]);
							 datos[0].setDataType(DataType.STRING_TYPE);

							 datos[1]= new DataType(); //Nombres
							 datos[1].setAlignMode(Element.ALIGN_LEFT);
							 datos[1].setData(obj[1]+" "+obj[2]+" "+obj[3]);
							 datos[1].setDataType(DataType.STRING_TYPE);

							 datos[2]= new DataType();   //Monto credito
							 datos[2].setAlignMode(Element.ALIGN_CENTER);
							 datos[2].setData(((java.math.BigDecimal)obj[4]).doubleValue());
							 datos[2].setDataType(DataType.CURRENCY_TYPE);

							 datos[3]= new DataType();   //Monto x periodo
							 datos[3].setAlignMode(Element.ALIGN_CENTER);
							 datos[3].setData(((java.math.BigDecimal)obj[5]).doubleValue());
							 datos[3].setDataType(DataType.CURRENCY_TYPE);

							 datos[4]= new DataType();   //Monto total
							 datos[4].setAlignMode(Element.ALIGN_CENTER);
							 datos[4].setData(((java.math.BigDecimal)obj[6]).doubleValue());
							 datos[4].setDataType(DataType.CURRENCY_TYPE);
							 
							 							 
							 datos[5]= new DataType();//Fecha inicial
							 datos[5].setAlignMode(Element.ALIGN_CENTER);
							 datos[5].setData(Formatter.getStringFromDate((Date)obj[7]));
							 datos[5].setDataType(DataType.STRING_TYPE);

							 datos[6]= new DataType();//Fecha inicial
							 datos[6].setAlignMode(Element.ALIGN_CENTER);
							 datos[6].setData(Formatter.getStringFromDate((Date)obj[8]));
							 datos[6].setDataType(DataType.STRING_TYPE);

							 datos[7]= new DataType();//Fecha Registro inicial
							 datos[7].setAlignMode(Element.ALIGN_CENTER);
							 datos[7].setData(Formatter.getStringFromDate((Date)obj[9]));
							 datos[7].setDataType(DataType.STRING_TYPE);
							 
							 datos[8]= new DataType();   //Monto pago
							 datos[8].setAlignMode(Element.ALIGN_CENTER);
							 datos[8].setData(((java.math.BigDecimal)obj[11]).doubleValue());
							 datos[8].setDataType(DataType.CURRENCY_TYPE);
							 
							 datos[9]= new DataType();   //Monto abono
							 datos[9].setAlignMode(Element.ALIGN_CENTER);
							 datos[9].setData(((java.math.BigDecimal)obj[13]).doubleValue());
							 datos[9].setDataType(DataType.CURRENCY_TYPE);

							 datos[10]= new DataType();   //Monto capital
							 datos[10].setAlignMode(Element.ALIGN_CENTER);
							 datos[10].setData(((java.math.BigDecimal)obj[14]).doubleValue());
							 datos[10].setDataType(DataType.CURRENCY_TYPE);

							 datos[11]= new DataType();   //Monto intereses
							 datos[11].setAlignMode(Element.ALIGN_CENTER);
							 datos[11].setData(((java.math.BigDecimal)obj[15]).doubleValue());
							 datos[11].setDataType(DataType.CURRENCY_TYPE);

							 datos[12]= new DataType();   //Monto impuestos
							 datos[12].setAlignMode(Element.ALIGN_CENTER);
							 datos[12].setData(((java.math.BigDecimal)obj[16]).doubleValue());
							 datos[12].setDataType(DataType.CURRENCY_TYPE);

							 datos[13]= new DataType();   //Monto comisión
							 datos[13].setAlignMode(Element.ALIGN_CENTER);
							 datos[13].setData(((java.math.BigDecimal)obj[17]).doubleValue());
							 datos[13].setDataType(DataType.CURRENCY_TYPE);

							 
							 listadoDatos.add(datos);					
						
						}
						
						pdfTable = new PDFTable(tamCols,header,listadoDatos);
						doc.add(pdfTable.getTable());
				
			}else{
				Paragraph p = new Paragraph("Error al generar el documento",FontFactory.getFont(FontFactory.COURIER, 28, Font.BOLD, new Color(0, 0, 0)));
				doc.add(p);
			}
			
			doc.add (Chunk.NEWLINE);
			doc.add (Chunk.NEWLINE);
			doc.close();
			
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (PDFDocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
		
		
	}

	protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1)
			throws ServletException, IOException {
		doPost(arg0, arg1);
	}
}

